package team.hyznrj.studentsys.service;

import java.util.List;
import java.util.Map;

import team.hyznrj.studentsys.dto.QualityAchievementDto;
import team.hyznrj.studentsys.dto.QualitySearchDto;
import team.hyznrj.studentsys.dto.StudentMessageSearchDto;
import team.hyznrj.studentsys.entity.QualityAchievement;
import team.hyznrj.studentsys.entity.QualityAchievementExample;
import team.hyznrj.studentsys.entity.QualityEntity;
import team.hyznrj.studentsys.entity.QualityResultEntity;
import team.hyznrj.studentsys.entity.QualityType;
import team.hyznrj.studentsys.entity.SGQEntity;
import team.hyznrj.studentsys.enums.DataBaseOperateMethod;

/**
 * 操行分管理服务
 * 包括:增、删、改、查
 * @author 郑泽锋
 * @date 2018年4月25日
 */
public interface QualityAchievementService {
	/**
	 * 添加多条操行分记录（区别：学号数组）
	 * @param record
	 * @param flag
	 * @return
	 */
	String addMsgs(final QualityAchievementDto record,final String flag);
	/**
	 * 增/删/改一条操行分记录
	 * @param record
	 * @return 操作是否成功
	 */
	boolean operateQuality(final QualityAchievementDto record,final DataBaseOperateMethod method,final String flag);
	/**
	 * 增加/删/改一系列操行分记录
	 * 限制：插入条数500/次
	 * @param record
	 * @return 操作成功数
	 */
	int operateQualities(final List<QualityAchievementDto> records,final DataBaseOperateMethod method,final String flag);
	/**
	 * 根据编号删除若干条操行分记录
	 * @param no
	 * @param flag 
	 * @return
	 */
	int deleteMulityQualities(final List<String> no, String flag);
	/**
	  * 按指定条件查询信息
     */
    List<QualityAchievement> selectByExample(final QualityAchievementExample example);
    /**
     * 通过学号计算多个学生的全部测评值
     * 需要传入:学号,学年(为0表示全部学年),学期(为0表示全部学期)
     * @param stuNo 学生学号数组
     * @param flag 标识符
     * @param stuMessage 学生信息(修饰者)
     * @param type 思想道德分类型数组
     * @return List<HashMap<String,Float>>
     */
	List<QualityEntity> countDataByStuNo(final List<QualitySearchDto> stu, String flag,
			final Map<String,SGQEntity> stuMessage);
	/**
	 * 根据学院/专业/班级查询 多条操行分(细节)
	 * 列出的是一条一条的数据
	 * @return
	 * 若要查看个人的操行分汇总，则使用 selectBySimple
	 * @see selectBySimple
	 */
	Map<String,Object> selectByDetail(StudentMessageSearchDto dto);
	/**
	 * 根据学院/专业/班级查询 多条操行分(汇总)
	 * @param dto
	 * @return
	 */
	Map<String,Object> selectBySimple(StudentMessageSearchDto dto);
	/**
	 * 根据查询条件/年份获取操行分数据
	 * @param ids 学号(空则无意义)
	 * @param academyYear 年份(不可为空)
	 * @param item 学期(可为空)
	 * @return
	 */
	List<QualityAchievement> getQualityAchievementByConditions(List<String> ids, String academyYear, Integer item);
}
